#ifndef PARSER_H
#define PARSER_H

#include "lexer.h"
#include "ast.h"

// 语法分析器结构
typedef struct {
    Lexer* lexer;
    Token* current_token;
    Token* peek_token;
} Parser;

// 语法分析器基础操作函数
Parser* create_parser(Lexer* lexer);
void free_parser(Parser* parser);
void parser_next_token(Parser* parser); 
int check_token(Parser* parser, TokenType type);
int check_peek_token(Parser* parser, TokenType type);
int expect_token(Parser* parser, TokenType type);
void parser_error(Parser* parser, const char* message);

// SQL语句解析函数
ASTNode* parse_statement(Parser* parser);
ASTNode* parse_create_table(Parser* parser);
ASTNode* parse_insert(Parser* parser);
ASTNode* parse_select(Parser* parser);
ASTNode* parse_delete(Parser* parser);
ASTNode* parse_drop_table(Parser* parser);
ASTNode* parse_alter_table(Parser* parser);
ASTNode* parse_update(Parser* parser);
ASTNode* parse_expression(Parser* parser);
ASTNode* parse_term(Parser* parser);
ASTNode* parse_factor(Parser* parser);

#endif // PARSER_H